Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

242
Visualizações
UseQuery graphql -> useState con useEffect de modo que pueda ejecutar el segundo useEffect para establecer más estados

Estoy usando Apollo para consultas de graphQL en un proyecto NextJS. Tengo la siguiente solicitud. Siento que la solución a esto es simple, pero el error ocurre en la sección stateData.allProducts , dice que es nulo, pero configuré el estado en useEffect y tiene data como una dependencia en la matriz, así que no debería ' Se vuelve a renderizar una vez que se han cargado los datos.

Todo esto funciona bien si coloqué estas comprobaciones debajo de una declaración if comprobando la carga y el retorno ...loading pero luego no puedo usar useEffect.

Cualquier ayuda sobre lo que estoy haciendo mal sería muy apreciada.

¡Gracias!

 const { data, loading, error } = useQuery(QUERY); const Router = useRouter(); // Creating state and setting it from query const [stateData, setStateData] = useState(null); const [disableAddToCart, setDisableAddToCart] = useState(false); useEffect(() => { setStateData(data); }, [data]); //~~~~~~~// <--- RIGHT HERE IS WHERE I GET THE NULL ERROR const productFound = stateData.allProduct.find( (product: any) => product.slug.current === Router.query.product ); const currentItem = cartDetails[productFound.id]; useEffect((): void => { console.log("currentItem", currentItem); if (currentItem) { if (currentItem.quantity > 0) { setDisableAddToCart(true); } else { setDisableAddToCart(false); } } }, [currentItem]);
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Mientras su consulta se esté cargando, o si hay un error, la variable de data de useQuery será null .

Por lo tanto hay que comprobar que la loading haya finalizado y que no se haya producido ningún error . Y/o para que los data sean definidos.

Además, stateData es innecesario, porque data ya son una variable de estado lista para usar.

 const { data, loading, error } = useQuery(QUERY); const Router = useRouter(); const [disableAddToCart, setDisableAddToCart] = useState(false); let productFound; let currentItem; if(!loading && !error && data?.allProduct){ productFound = data.allProduct.find( (product: any) => product.slug.current === Router.query.product ); currentItem = cartDetails[productFound.id]; } useEffect((): void => { //since you are using typescript, you can use the optional chaining operator if (currentItem?.quantity > 0) { setDisableAddToCart(true); } else { setDisableAddToCart(false); } }, [currentItem]);
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda